package com.umeox.sdk_ring.protocol

/**
 * APP提供的接口
 */
interface IAppProtocol {
    /**
     * 开始连接/连接中
     */
    fun onConnecting()

    /**
     * 连接成功
     */
    fun onConnected()

    /**
     * 断开连接/断开中
     */
    fun onDisconnecting()

    /**
     * 断开连接
     */
    fun onDisconnected()

    /**
     * 连接超时
     */
    fun onConnectTimeout()

    /**
     * 主动请求时间同步
     * R01
     */
    fun requestTimeSync()

    /**
     * 主动停止寻找设备：设备端已停止寻找,不需要APP端反馈
     * R04
     */
    fun requestStopFindDevice()

    /**
     * 1.时间请求同步
     * Q01
     */
    fun onTimeSyncCallback()

    /**
     * 2.上发电量
     * 这个指令仅是APP端获取，设备端不会自动上传。
     * 状态值：0：未充电；1：充电；2：充满 3：低电
     * 版本名：(0.1.2)
     * 内部版本号：整数
     * Q02,充电状态值,电量值,内部版本号,版本编译时间,电压值(供测试用),版本名
     */
    fun onBatteryPowerCallback(
        status: String,
        bat: String,
        version: String,
        versionName: String,
        buildTime: String
    )

    /**
     * 3.翻转收到
     * 屏设置：(0:正；1:反)
     * Q03，屏设置状态
     */
    fun onScreenFlipCallback(isPositive: Boolean)

    /**
     * 4.寻找设备找到
     * Q04
     */
    fun onDeviceFind()

    /**
     * 5.上发设备状态信息
     * 这个指令仅设备端上传，在蓝牙连接情况下，充电时每10分钟上发一次，不充电时每小时上发一次。
     * Q05,充电状态值,电量值
     */
    fun onBatteryPowerChangeCallback()

    /**
     * 6.上发计数信息：结束符(0:结束；1:未结束)
     * 接收到P12，自动上发未传计数数据
     * Q06,开始时间，结束时间，计数值，tick值，结束符
     */
    fun onCacheDataCallback(
        startTime: String,
        endTime: String,
        num: Int,
        tick: String,
        endFlag: Int
    )

    /**
     * 7.实时计数数据上传
     * v1:Q07,计数值,tick值
     * v2:Q07,计数值,tick值,任务状态值,当前任务计数值
     * 任务状态值: 0:无任务；1:有任务未开始；2:任务进行中；3:任务中断或者取消结束；4:任务完成
     * 当前任务计数值
     */
    fun onRealTimeCountCallback(num: Int, tick: String, taskStatus: Int, currentTaskNumber: Int)

    /**
     * 8.关机状态
     * Q08
     */
    fun onShutdownCallback()

    /**
     * 9.祈祷设置
     * Q09
     */
    fun onSettingPrayerRemindersCallback()

    /**
     * 10.重启
     * Q10
     */
    fun onRebootCallback()

    /**
     * 11.诵经提醒设置
     * Q11
     */
    fun onChantingRemindersSettingCallback()

    /**
     * 12.设备自动上发未传计数数据:未传数据条数(0:不存在数据)
     * v1:Q12,未传数据条数
     * v2:Q12,未传数据条数,当前实时计数值,当前任务实时计数值
     */
    fun onDataCacheSizeCallback(num: Int, currentRealTimeNumber: Int, currentTaskNumber: Int)

    /**
     * 13.设备上发已设置信息
     * 屏设置：(0:正；1:反)
     * 祈祷设置：开关#开始时间(不设置：0#0)
     * 诵经设置：时间间隔(分钟)#时间范围(不设置:0#0#0)
     * v2:任务功能支持状态:0：不支持 1:支持
     * Q13,0,5#20210914152938,120#00:00#23:59,0,0
     * Q13,0,0#0,0#0#0,0,0
     * Q13,屏设置,祈祷设置,诵经设置，亮度设置，语言设置
     * v2:Q13,屏设置,祈祷设置,诵经设置,亮度设置,语言设置,任务功能支持状态,任务状态值,目标计数值,当前任务经文值
     * v3:Q13,屏设置,祈祷设置,诵经设置,亮度设置,语言设置,任务功能支持状态,任务状态值,目标计数值,当前任务经文值,协议版本号
     */
    fun onDeviceConfigInfoCallback(
        isPositive: Boolean,
        isOpenPray: Int,
        chartingStartTime: String,
        chartingEndTime: String,
        light: Int,
        languageType: Int,
        timeInterval: Int,
        supportTaskMode: Boolean,
        taskStatus: Int,
        targetNumber: Int,
        taskId: Int,
        remarks: String,
        protocolVersion: String
    )

    /**
     * 14.设备上发相关log信息
     * log信息长度：总大小为4096,每次最大上传字节是192,可多次连续上传(每接收到P14)
     * log上传结束：Q14,0
     * Q14,log信息长度,log信息
     */
    fun onDeviceLogCallback()

    /**
     * 15.亮度设置
     * Q15
     */
    fun onDeviceScreenBrightnessCallback()

    /**
     * 16.多语言设置回调
     * Q16
     */
    fun onSettingDeviceLanguageCallback()

    /**
     * 17.自定义惯例设置回调
     * Q17
     */
    fun onSettingCustomizeConventionCallback()

    /**
     * 18.特殊祈祷设置
     * Q18
     */
    fun onSettingStableConventionCallback()

    /**
     * 19.任务设置（默认关闭0）
     * Q19
     */
    fun onSettingTasbihTaskCallback()

    /**
     * 20.设备上发任务信息
     * 任务开始时间:0到1开始算时间
     * 任务结束时间:任务完成后时间
     * 接收到P12，自动上发未传任务计数数据或者首次达到任务目标自动上发
     * Q20,目标计数值,当前任务经文值,任务开始时间,任务结束时间，tick值
     */
    fun onGetTasbihTaskInfoCallback(
        targetNumber: Int,
        taskId: Int,
        startTime: String,
        endTime: String,
        tick: String
    )

    /**
     * 21.设置船航模式
     * Q21
     */
    fun onSetShipNavigationMode()

    /**
     * 22.自定义息屏时间设置：
     * Q22
     */
    fun onSetScreenRestTime()

    /**
     * 23.祈祷提醒添加独立开关、偏移时间和提醒时间：
     * Q23
     */
    fun onSetPrayerRemindConfig()

    /**
     * 24.自定义计数提醒：
     * Q24
     */
    fun onSetCustomCountReminder()

    /**
     * 25.获取祈祷提醒配置信息
     * Q25,息屏时间,晨礼开关#偏移时间#提醒时间:晌礼开关#偏移时间#提醒时间:晡礼开关#偏移时间#提醒时间:昏礼开关#偏移时间#提醒时间:宵礼开关#偏移时间#提醒时间,
     * 普通计数33*N模式开关#普通计数100*N模式开关#自定义计数值
     */
    fun onGetPrayerRemindConfig(
        restTime: Int,
        configs: Array<Array<Int>>,
        normal33: Boolean,
        normal100: Boolean,
        customValue: Int
    )

    /**
     * 26.用户信息设置
     * Q26
     */
    fun onSetUserInfo()

    /**
     * 27.获取当前步数
     * Q27,当前步数
     */
    fun onGetCurrentStep(step: Int)

    /**
     * 28.获取睡眠信息(数据进行分包发送，循环发送，结束为止)
     * Q28,总睡眠时段个数,当前睡眠时段数目,开始时间#结束时间#睡眠时长,开始时间#结束时间#睡眠时长,开始时间#结束时间#睡眠时长
     * //总睡眠时段个数:目前数据是7天，如果每天6个时段，总最大42个
     * //当前睡眠时段数目(每次最大6个)：当前时段的个数(设定晚上8点到早上8点共12小时，2个小时为最大时长，最多有6个)
     * //开始时间:yyyyMMddHHmmss
     * //结束时间:yyyyMMddHHmmss
     * //睡眠时长：(0-120)min
     * //数据结束（无数据）：Q28,0
     * //Q29,6,6,20231219083012#20231219103012#100,20231219083012#20231219103012#100,
     * 20231219083012#20231219103012#100,20231219083012#20231219103012#100,
     * 20231219083012#20231219103012#100,20231219083012#20231219103012#100
     */
    fun onGetAllSleepData()

    /**
     * 29.获取所有时间段计步信息(数据进行分包发送，循环发送，结束为止)
     * Q29,总时间段个数,日期时间段，各个时间段(每一个小时总共24组)计步数（#隔开）
     * //总时间段个数:目前数据是7天
     * //日期时间段:yyyyMMdd
     * //计步数:16位数值（0-65536）
     * //数据结束（无数据）：Q29,0
     * //Q29,1,20231219,11111#11111#11111#11111#11111#11111#11111#...
     */
    fun onGetAllStepData()

    /**
     * 30.pkey读写操作对应反馈
     * //读取：Q30,pYVRH2eMRmy9AQ8zMM/Wk8BTCDk879yxlAuqcaddV5PsDC0t0Xdz0dhE/3v4J6ww
     * //写入：Q30
     */
    fun onPkeyOperation(pkey: String)

    /**
     * 32.Gsensor 测试
     * //GsensorId：不等于0，如果等于0，就表明硬件有问题
     * //算法运行状态值：0：异常（pkey与蓝牙地址匹配不上）1：正常
     * //xyz坐标值：不可超过8G,如果等于7999，就表明硬件有问题
     * Q32,GsensorId,算法运行状态值,x坐标值#y坐标值#z坐标值,x坐标值#y坐标值#z坐标值,x坐标值#y坐标值#z坐标值
     * //Q32,144,1,972#-24#-190,974#-25#-191,972#-21#-194
     */
    fun onGsensorTest(gsensorId: Int, status: Int, datas: Array<Int>)

    /**
     * 设备上传gsensor数据 每秒50组数据 分5包发送
     * Q50,时间(年月日时分+包数(1-5)),10组xyz数据
     */
    fun onGSensorDataReport(datetime: String, packageIndex: Int, datas: Array<String>)

    /**
     * 34.上发朝拜计数信息：结束符（0：结束，1：未结束）
     * //当前朝拜记录时间：yyyyMMddhhmm
     * //一段朝拜计数值：分别对应5个时间段：（祈祷未开始数值=-1）
     * //收到P40后，自动上发未传朝拜计数数据
     * Q34,当前朝拜记录时间,朝拜计数值&朝拜计数值&朝拜计数值&朝拜计数值&朝拜计数值,tick值,结束符
     */
    fun onGetWorshipCacheData(
        updateTime: String, fajrCount: Int,
        dhuhrCount: Int,
        asrCount: Int,
        maghribCount: Int,
        ishaCount: Int, tick: String, endFlag: Int
    )

    /**
     * 35.实时朝拜计数上发（有蓝牙连接会自动上发）
     * Q35,计数值
     */
    fun onGetRealtimeWorship(count: Int)

    /**
     * 36.led灯时间及亮度设定
     * Q36
     */
    fun onSetLedTimeAndLight()

    /**
     * 37.设备信息上发
     * Q37,时间段,蓝牙地址,蓝牙名称,电量,led显示时间,led亮度值,版本
     */
    fun onGetSc01DeviceInfo(
        battery: Int,
        lightTime: Int,
        light: Int,
        protocolVersion: String,
        softwareVersion: String,
        audioEnable: Boolean
    )

    /**
     * 38.设备红外测试（进入测试模式通过led显示计数来测试）
     * Q38,测试开关
     */
    fun onDeviceInfraRedTest(enable: Boolean)

    /**
     * 39.设备雷达测试（进入测试模式通过led显示计数来测试）
     * Q39,测试开关
     */
    fun onDeviceRadarTest(enable: Boolean)

    /**
     * 40.获取设备端所有已存未上传朝拜计数数据：未传数据条数（0：不存在数据）
     * Q40,未传数据条数
     */
    fun onGetAllWorshipCacheData(count: Int)

    /**
     * 41.朝拜计数修改
     * //修改标志   0：（不成功）   1：（成功）
     * Q41,修改标志
     */
    fun onModifyWorshipNumberByIndex(success: Boolean)

    /**
     * 42.设备马达老化测试（进入测试模式）
     * Q42,测试开关
     */
    fun onDeviceMotorAgingTest(enable: Boolean)

    /**
     * 43.设备雷达返回触发结果
     * Q43
     */
    fun onGetDeviceMotorAgingTestResul()

    /**
     * 44.设备上发tof（距感）状态数据：
     * //状态值：0（未启动）1：已启动
     * //距离值:  超过1米，默认固定距离2m(2000),单位毫米
     * Q44,状态值，距离值
     */
    fun onGetTofResult(status: Int, distance: Int)

    /**
     * 45.tof校准指令1反馈：
     * //状态值：0：正常；非0：校准失败
     * Q45,状态值
     */
    fun onTofCalibration1(status: Int)

    /**
     * 46.tof校准指令2反馈：
     * //状态值：0：正常；非0：校准失败
     * Q46,状态值
     */
    fun onTofCalibration2(status: Int)

    /**
     * 47.喇叭音频测试反馈：
     * Q47
     */
    fun onSc01SpeakerAudioTest()

    /**
     * 51.音频播放设定
     * Q51
     */
    fun onSetSc01AudioEnable()

}